Grouping for Graphic Object

그래픽 작업시, 서로 다른 객체들을 드래그로 여러개 선택해서 하나의 객체처럼 다루는 작업
struct GraphicObject{
virtual void draw()=0;
};
struct Circle: GraphicObject{
void draw() override {
std::cout<<"Circle"<<std::endl;
}
};
struct Group: GraphicObject{
std::string name;
explicit Group(const std::string& name): name(name) {}
void draw() override {
std::cout<<"Group"<<name.c_str()<<" contains:"<<std::endl;
for(auto&& o: objects) o->draw();
}
std::vector<GraphicObject*> object;
};
//
Group root("root");
Circle c1, c2;
root.objects.push_back(&c1);
Group subgroup("sub");
subgroup.objects.push_back(&c2);
root.object.push_back(&subgroup);
root.draw();
표준적으로 Composite 디자인 패턴은 반복자 인터페이스를 이용해 객체 순회 방식을 사용한다.